package uy.edu.ort.persistencia.dominio;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import uy.edu.ort.dp.dominio.Fuente;
import uy.edu.ort.persistencia.entidades.FuenteEntity;
import uy.edu.ort.dp.interfaces.FuenteSBRemote;

/**
 *
 * @author Leo
 */
@Stateless
public class FuenteSB implements FuenteSBRemote {

    @PersistenceContext
    EntityManager em;

    @Override
    public Long crearFuente(Fuente fuente) {
        FuenteEntity entidad = new FuenteEntity();
        entidad.setResponsable(fuente.getResponsable());
        entidad.setNombreFuente(fuente.getNombreFuente());
        em.persist(entidad);

        return entidad.getId();
    }

    @Override
    public Fuente obtenerFuentePorId(Long idFuente) {
        FuenteEntity entidadRetorno = em.find(FuenteEntity.class, idFuente);       
        if (entidadRetorno == null) {            
            return null;
        } else {           
            return mapearFuente(entidadRetorno);
        }
    }

    @Override
    public Fuente obtenerFuentePorNombre(String nombreFuente) {
        FuenteEntity entidad = new FuenteEntity();
        entidad.setNombreFuente(nombreFuente);
        FuenteEntity entidadRetorno = em.find(FuenteEntity.class, entidad);
        return mapearFuente(entidadRetorno);

    }

    @Override
    public boolean autorizarFuente(Long fuenteId, String codigoAutorizacion) {
        FuenteEntity entidadRetorno = em.find(FuenteEntity.class, fuenteId);
        if (entidadRetorno == null) {
            return false;
        }

        entidadRetorno.setCod_autorizacion(codigoAutorizacion);
        em.merge(entidadRetorno);
        return true;
    }

    @Override
    public boolean eliminarFuente(Long fuenteId) {
        FuenteEntity entidad = em.find(FuenteEntity.class, fuenteId);
        if (entidad == null) {
            return false;
        }
        em.remove(entidad);

        return true;
    }

    private Fuente mapearFuente(FuenteEntity entidadRetorno) {
        Fuente fuente = new Fuente();
        fuente.setCod_autorizacion(entidadRetorno.getCod_autorizacion());
        fuente.setId(entidadRetorno.getId());
        fuente.setNombreFuente(entidadRetorno.getNombreFuente());
        fuente.setResponsable(entidadRetorno.getResponsable());
        return fuente;
    }
}
